home *** CD-ROM | disk | FTP | other *** search
- /* test suite for malloc(3),realloc(3), and free(3) */
-
- /* (c) Copyright 1990 H.Rogers */
-
- #include <stdio.h>
- #include <string.h>
- #ifdef __STDC__
- #include <stdlib.h>
- #else
- extern void srand();
- extern int rand();
- extern void *malloc();
- extern void *realloc();
- extern void free();
- #endif
- #include <time.h>
-
- #ifndef ARCH
- #ifdef __STDC__
- extern void __initalloc(void);
- #else
- extern void __initalloc();
- #endif
- #endif
-
- #define NBLK 512
- #define BLKSIZ 2048
-
- #ifdef M_DEBUG
- #ifdef __STDC__
- extern void __m_debug(void);
- #else
- extern void __m_debug();
- #endif
- #else
- #ifdef __STDC__
- static void __m_debug(void) { }
- #else
- static void __m_debug() { }
- #endif
- #endif
-
- #ifdef __STDC__
- static void *alloc(register size_t z)
- #else
- static void *alloc(z)
- register size_t z;
- #endif
- {
- register void *r;
-
- r = malloc(z); if (r) memset(r,0xff,z);
-
- return(r);
- }
-
- #ifdef __STDC__
- static void *ralloc(register void *r,register size_t z)
- #else
- static void *ralloc(r,z)
- register void *r;
- register size_t z;
- #endif
- {
- r = realloc(r,z); if (r) memset(r,0xff,z);
-
- return(r);
- }
-
- int main(int argc,char **argv)
- {
- void *m[NBLK];
- int i,j;
- void *k;
-
- #ifndef ARCH
- __initalloc();
- #endif
-
- if (argc < 2) srand(0); else srand(atoi(argv[1]));
-
- printf("stage: 1\n");
-
- for (i = 0; i < NBLK; i++)
- m[i] = alloc(rand() & (BLKSIZ-1));
-
- __m_debug();
-
- printf("stage: 2\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand() & (BLKSIZ-1);
- k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
- }
-
- __m_debug();
-
- printf("stage: 3\n");
-
- for (i = 0; i < (NBLK>>2); i++)
- {
- j = rand() & (NBLK-1);
- if (m[j]) { free(m[j]); m[j] = 0; }
- }
-
- __m_debug();
-
- printf("stage: 4\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand() & (BLKSIZ-1);
- k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
- }
-
- __m_debug();
-
- printf("stage: 5\n");
-
- for (i = 0; i < (NBLK>>2); i++)
- {
- j = rand() & (NBLK-1);
- if (m[j]) { free(m[j]); m[j] = 0; }
- }
-
- __m_debug();
-
- printf("stage: 6\n");
-
- for (i = 0; i < NBLK; i++)
- if (!m[i]) m[i] = alloc(rand() & (BLKSIZ-1));
-
- __m_debug();
-
- printf("stage: 7\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i])
- {
- j = rand() & (BLKSIZ-1);
- k = ralloc(m[i],j); if (!k) free(m[i]); m[i] = k;
- }
-
- __m_debug();
-
- printf("stage: 8\n");
-
- for (i = 0; i < NBLK; i++)
- if (m[i]) free(m[i]);
-
- __m_debug();
-
- return(0);
- }
-